package cloud.consumer.feign.config;

import feign.Logger;
import feign.Retryer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @auther xfanonymous
 * @create 2023-12-25 17:58
 *
 * OpenFeign重试机制
 * 1. 默认不开启重试 Retryer.NEVER_RETRY
 * 2. 通过`Retryer`配置重试机制 new Retryer.Default(100,1,3);
 * 3. 不会展示重试过程和次数，只展示超时结果，总超时时长=重试次数*请求超时时间
 *
 * OpenFeign日志配置
 * 1. 可以通过`feign.Logger.Level`调整日志级别
 * 2. NONE：默认，不显示任何日志；
 * 3. BASIC：仅记录请求方法、URL、响应状态码及执行时间；
 * 4. HEADERS：BASIC信息，还有请求和响应的头信息；
 * 5. FULL：HEADERS信息，还有请求和响应的正文及元数据。
 */
@Configuration
public class FeignConfig
{
    @Bean
    public Retryer myRetryer()
    {
        // Feign默认配置不重试
        return Retryer.NEVER_RETRY;

        // 开启重试配置，初始间隔100ms，最大重试间隔1s，总请求次数为3(1初次+2重试)，
//        return new Retryer.Default(100,1,3);
    }

    // 配置Feign日志Bean
    @Bean
    Logger.Level feignLoggerLevel() {
        // 开启全量日志
        return Logger.Level.FULL;
    }
    /**
     * 日志效果：
     * 2024-03-15T09:45:39.260+08:00 DEBUG 44580 --- [cloud-consumer-openfeign-order] [p-nio-82-exec-2]
     * com.xfanonymous.cloud.api.PayFeignApi    : [PayFeignApi#getPayInfo] <--- END ERROR
     */
}
